package com.gnerv.sylvanas.business.manage.repository.mapper;

import com.gnerv.sylvanas.business.manage.model.dto.AccountDTO;
import com.gnerv.sylvanas.business.manage.model.dto.AccountDetailsDTO;
import com.gnerv.sylvanas.business.manage.model.dto.AuthAccountDTO;
import com.gnerv.sylvanas.business.manage.model.entity.Account;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * @author ligen
 */
@Mapper
public interface AccountMapper {

    int insert(@Param(value = "account") Account account);

    int deleteByUkId(@Param(value = "ukId") String ukId);

    int deleteBatchByUkIds(@Param(value = "ukIds") List<String> ukIds);

    int updateByUkId(@Param(value = "account") Account account);

    AccountDTO selectByUkId(@Param(value = "ukId") String ukId);

    AccountDetailsDTO selectDetailsByUkId(@Param(value = "ukId") String ukId);

    AccountDTO selectByUsername(@Param(value = "username") String username);

    AccountDetailsDTO selectDetailsByUsername(@Param(value = "username") String username);

    AuthAccountDTO selectAuthAccountByUsername(@Param(value = "username") String username);

    List<AccountDTO> selectListByUsername(@Param(value = "username") String username,
                                          @Param(value = "limitStart") int limitStart,
                                          @Param(value = "limitSize") int limitSize);

    int countByUsername(@Param(value = "username") String username);

    List<AccountDTO> selectListByRoleUkId(@Param(value = "roleUkId") String roleUkId);

    List<AccountDTO> selectListByOrgUkId(@Param(value = "orgUkId") String orgUkId);

    List<AccountDetailsDTO> selectListDetailsByOrgUkId(@Param(value = "orgUkId") String orgUkId);

    int selectCountByUsername(@Param(value = "username") String username);

    Set<String> selectListUkIdByRoleUkIdAndOrgUkId(@Param(value = "roleUkIdList") Set<String> roleUkIdList,
                                                   @Param(value = "orgUkIdList") Set<String> orgUkIdList);

    Set<String> selectListUsernameByRoleUkIdAndOrgUkId(@Param(value = "roleUkIdList") Set<String> roleUkIdList,
                                                       @Param(value = "orgUkIdList") Set<String> orgUkIdList);

    List<AccountDetailsDTO> selectListDetailsByUsername(@Param(value = "username") String username,
                                                        @Param(value = "limitStart") int limitStart,
                                                        @Param(value = "limitSize") int limitSize);
}




